#include "config.h"
#include "GPIO_InIt.h"
#include "IR_Exit.h"

unsigned int  IR_Time;			//临时存储寄存器计数用于判断
unsigned char IR_State;			//接收状态标志位
unsigned char IR_Data[4];		//存储接收数据
unsigned char IR_pData;			//递增接收指针
unsigned char IR_Address;
unsigned char IR_Command;
unsigned char CommandS;
unsigned char IR_RepeatFlag;	//连发标志位
unsigned char IR_DataFlag;		//接收完成标志位
u8 NPN;

void UART_config(void)
{
	COMx_InitDefine		COMx_InitStructure;					
	COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;
	COMx_InitStructure.UART_BRT_Use   = BRT_Timer1;
	COMx_InitStructure.UART_BaudRate  = 9600;
	COMx_InitStructure.UART_RxEnable  = ENABLE;
	COMx_InitStructure.BaudRateDouble = DISABLE;
	COMx_InitStructure.UART_Interrupt = ENABLE;
	COMx_InitStructure.UART_Priority  = Priority_0;
	COMx_InitStructure.UART_P_SW      = UART1_SW_P30_P31;
	UART_Configuration(UART1, &COMx_InitStructure);
	EA=1;//中断总开关
}

void main()
{
	GPIO_Init();
	UART_config();
	IR_Init();
//	Timer1_Init();
	while(1)
	{	
		if()
	}
}

void timer1_int (void) interrupt TIMER1_VECTOR
{
	if(IR_Command==0x19)//第一个按键按下
	{
		Yin_Dao=1;
	}
	else if(IR_Command==0x18)
	{
		MA=1;
		MB=0;
	}
	else if(IR_Command==0x1C)
	{
		MA=0;
		MB=1;
	}
	else if(IR_Command==0x52)
	{
		if(NPN==1)
		{
			NPN=0;
			JDQ_SW=1;				
		}
		else
		{
			JDQ_SW=0;	
		}
	}		
	else if(IR_Command == 0)//按键松手
	{
		Yin_Dao=0;
		
		MA=0;
		MB=0;
		NPN=1;
	}
}


//外部中断0中断函数，下降沿触发执行
void Int0_Routine(void) interrupt 0
{
	if(IR_State==0)				//状态0，空闲状态
	{
		Timer0_SetCounter(0);	//定时计数器清0
		Timer_KG(1);			//定时器启动
		IR_State=1;				//置状态为1
	}
	else if(IR_State==1)		//状态1，等待Start信号或Repeat信号
	{
		IR_Time=Timer0_GetCounter();	//获取上一次中断到此次中断的时间
		Timer0_SetCounter(0);	//定时计数器清0
		//如果计时为13.5ms，则接收到了Start信号（判定值在12MHz晶振下为13500，在11.0592MHz晶振下为12442）
		if(IR_Time>13500-500 && IR_Time<13500+500)
		{
			IR_State=2;			//置状态为2
		}
		//如果计时为11.25ms，则接收到了Repeat信号（判定值在12MHz晶振下为11250，在11.0592MHz晶振下为10368）
		else if(IR_Time>11250-500 && IR_Time<11250+500)
		{
			IR_RepeatFlag = 1;	//置收到连发帧标志位为1
			Timer_KG(0);		//定时器停止
			IR_State=0;			//置状态为0
		}
		else					//接收出错
		{
			IR_State=1;			//置状态为1
		}
	}
	else if(IR_State==2)		//状态2，接收数据
	{
		IR_Time=Timer0_GetCounter();	//获取上一次中断到此次中断的时间
		Timer0_SetCounter(0);	//定时计数器清0
		//如果计时为1120us，则接收到了数据0（判定值在12MHz晶振下为1120，在11.0592MHz晶振下为1032）
		if(IR_Time>1120-500 && IR_Time<1120+500)
		{
			IR_Data[IR_pData/8]&=~(0x01<<(IR_pData%8));	//数据对应位清0
			IR_pData++;			//数据位置指针自增
		}
		//如果计时为2250us，则接收到了数据1（判定值在12MHz晶振下为2250，在11.0592MHz晶振下为2074）
		else if(IR_Time>2250-500 && IR_Time<2250+500)
		{
			IR_Data[IR_pData/8]|=(0x01<<(IR_pData%8));	//数据对应位置1
			IR_pData++;			//数据位置指针自增
		}
		else					//接收出错
		{
			IR_pData=0;			//数据位置指针清0
			IR_State=1;			//置状态为1
		}
		
		if(IR_pData>=32)		//如果接收到了32位数据
		{
			IR_pData=0;			//数据位置指针清0
			if((IR_Data[0]==~IR_Data[1]) && (IR_Data[2]==~IR_Data[3]))	//数据验证
			{
				IR_Address=IR_Data[0];	//转存数据
				IR_Command=IR_Data[2];
				CommandS = IR_Command; //将数据暂存
				IR_DataFlag=1;	//置收到标志位为1
			}
			Timer_KG(0);		//定时器停止
			IR_State=0;			//置状态为0
		}
	}
}


	
